﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using RESTServices.Dominio;
using RESTServices.Persistencia;
using System.Messaging;

namespace RESTServices
{
    public class Gastos : IGastos
    {
        private GastoDAO dao = new GastoDAO();

        public Gasto CrearGasto(Gasto gastoACrear)
        {
            return dao.Crear(gastoACrear);
        }

        public Gasto ObtenerGastos(string codigo)
        {
            return dao.Obtener(codigo);
        }
        public Gasto AprobarGastos(string codigo)
        {
            Gasto oGasto = new Gasto();
                
            oGasto =  dao.Obtener(codigo);
            oGasto.estado = "A";
            string rutaColaIn = @".\private$\gastosin";
            if (!MessageQueue.Exists(rutaColaIn))
                MessageQueue.Create(rutaColaIn);
            MessageQueue colaIn = new MessageQueue(rutaColaIn);
            Message mensajeIn = new Message();
            mensajeIn.Label = "Nueva aprobacion gasto";
            mensajeIn.Body = oGasto;
            colaIn.Send(mensajeIn);
                                   
            return oGasto;
        }
        public Gasto RechazarGastos(string codigo)
        {
            Gasto oGasto = new Gasto();

            oGasto = dao.Obtener(codigo);
            oGasto.estado = "R";
            string rutaColaIn = @".\private$\gastosin";
            if (!MessageQueue.Exists(rutaColaIn))
                MessageQueue.Create(rutaColaIn);
            MessageQueue colaIn = new MessageQueue(rutaColaIn);
            Message mensajeIn = new Message();
            mensajeIn.Label = "Nueva rechazar gasto";
            mensajeIn.Body = oGasto;
            colaIn.Send(mensajeIn);

            return oGasto;
        }
        void IGastos.SincronizarGastos()        
        { 
            string rutaColaIn = @".\private$\gastosin";
            MessageQueue queue = new MessageQueue(rutaColaIn);
            queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(Gasto) });
            Message[] msgs = queue.GetAllMessages();
            foreach (Message msg in msgs)
            {
                queue.Receive();
                Gasto GastoCola = (Gasto)msg.Body;
                ModificarGasto(GastoCola);
            }
        
        }
        public Gasto ModificarGasto(Gasto oGasto)
        {
            return dao.Modificar(oGasto);
        }

        public void EliminarGasto(string codigo)
        {
            dao.Eliminar(dao.Obtener(codigo));
        }

        public List<Gasto> ListarGastos()
        {
            return dao.ListarTodos();
        }
    }
}
